<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>面向对象</title>
    <script>
        class Family{
            constructor(name,age){
                this.name = name
                this.age=age
            }
            sayHello(){
                console.log(`${this.name},差不多${this.age}岁了`)
            }
        }

        class Person extends Family{
            sayHello=()=>{
                console.log(`我是箭头函数${this.name},差不多${this.age}岁了`)
            }
        }

        class Animals extends Family{
            constructor(name,age,address){
                super(name,age)
                this.address=address
            }
            sayHello(){
                console.log('朱丽叶在睡大觉')
            }
        }
        const f1= new Family('李家','千秋万代')
        const p1=new Person('小李',27)
        const a1=new Animals('朱丽叶',2,'江苏南京')
        
        console.log(f1,p1,a1)
        f1.sayHello()
        p1.sayHello()
        a1.sayHello()



        /* 
            数据存储在原型对象和对象自身中

            子类的原型对象是父类的一个实例

            通过子类对象修改原型，会影响所有父类实例的原型。

            原型可以通过类的实例的来访问，也就是（Object.getPrototypeOf(实例)）
            也可以通过类的prototype来访问，也就是类名.prototype.方法名=具体方法
        */
    </script>
</head>
<body>
    
</body>
</html>